widget: create parent muxers lazily
authorMatthias Clasen <mclasen@redhat.com>
Sun, 23 Jun 2019 17:22:02 +0000 (17:22 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 23 Jun 2019 17:59:41 +0000 (17:59 +0000)
We need to create a muxer eagerly for every
widget that has class actions, since those
are otherwise missed in the action lookup
on the muxer side. But otherwise, there is
no reason to create parent muxers aggressively,
as long as we update the parent muxers on
root/unroot.

This reduces the number of muxers we create
in widget-factory from 210 to around 50.

gtk/gtkwidget.c

index 045dcef9d73a2f073844076f1cd4dc88a6e95136..1aff2005fd4bf1f77e6cc1dd22383fc31e37dae0 100644 (file)
@@ -2891,6 +2891,8 @@ gtk_widget_root (GtkWidget *widget)
   if (priv->surface_transform_data)
     add_parent_surface_transform_changed_listener (widget);
 
+  _gtk_widget_update_parent_muxer (widget);
+
   GTK_WIDGET_GET_CLASS (widget)->root (widget);
 
   if (!GTK_IS_ROOT (widget))
@@ -2911,6 +2913,8 @@ gtk_widget_unroot (GtkWidget *widget)
       surface_transform_data->tracked_parent)
     remove_parent_surface_transform_changed_listener (widget);
 
+  _gtk_widget_update_parent_muxer (widget);
+
   GTK_WIDGET_GET_CLASS (widget)->unroot (widget);
 
   if (priv->context)
@@ -11862,7 +11866,7 @@ gtk_widget_get_modifier_mask (GtkWidget         *widget,
 
 static GtkActionMuxer *
 gtk_widget_get_parent_muxer (GtkWidget *widget,
-                              gboolean   create)
+                             gboolean   create)
 {
   GtkWidget *parent;
 
@@ -11890,7 +11894,7 @@ _gtk_widget_update_parent_muxer (GtkWidget *widget)
     return;
 
   gtk_action_muxer_set_parent (muxer,
-                               gtk_widget_get_parent_muxer (widget, TRUE));
+                               gtk_widget_get_parent_muxer (widget, FALSE));
 }
 
 GtkActionMuxer *